package com.demo.aspect;
import org.aspectj.lang.ProceedingJoinPoint;

//用XML方式定义切面、切入点，这里只包含通知(最简版本)
public class XmlAspect1 {
    //前置通知
    public void before(){
        System.out.println("这是前置通知(执行准备或预检任务)");
    }

    //后置通知
    public void after(){
        System.out.println("这是后置(最终)通知(执行清理或收尾工作)");
    }

    /**
     * 环绕通知
     * ProceedingJoinPoint 是JoinPoint子接口，用于控制目标方法的执行
     * 1.必须是Object类型的返回值
     * 2.必须接收一个参数，类型为ProceedingJoinPoint
     * 3.必须throws Throwable
     */
    public Object around(ProceedingJoinPoint point)throws Throwable{
        System.out.println("这是环绕通知，在目标方法执行之前的部分(执行权限检查这样的前置任务)");
        //调用目标方法
        Object object=point.proceed();
        System.out.println("这是环绕通知，在目标方法执行之后的部分(执行日志记录这样的后置任务)");
        return object;
    }
}